"""
    利用类和列表的特性，不需要直接实例化类（间接实例化）就能调用到类成员。实现代码的复用
"""


class Student:
    # 数据成员，实例化时自动运行一次
    def __init__(self, name, age, score,sex):
        self.name = name
        self.age = age
        self.score = score
        self.sex = sex
    
    # 行为成员
    def print_info(self):
        print(f"{self.name}的年龄是{self.age}岁,成绩是{self.score}，性别是{self.sex}")
        

# 直接用类当做列表的元素进行实例化传参，从而保存数据成员
list_stu = [
    Student("张三", 48, 88, "男"),
    Student("李四", 38, 87, "男"),
    Student("王二麻子", 39, 68, "男"),
    Student("师太", 18, 78, "女"),
    Student("明玉", 18, 78, "女"),
    Student("赵敏", 18, 78, "女"),
    Student("苏大强", 28, 78, "男")
]

# for i in list_stu:
#     i.print_info()
    
#%% 定义函数，在list_stu中查找name是"师太"的对象，最后将名称与年龄打印在控制台中
def zao():
    for item in list_stu:
        if item.name == "师太":
            return item # 返回的是列表中当前元素整个对象的地址
# li = zao()
# print(li.name, li.age)

# %% 定义函数，在list_stu中查找所以女同学，将名字和年龄打印出来
def zao1():
    lie = []
    for i in list_stu:
        if i.sex == "女":
            lie.append(i)
    
    return lie

lis = zao1()
# print(lis.name, lis.age) # 这里访问是对象，没法直接拿到元素
# print(lis)
for i in lis: # 通过遍历拿到对象的元素
    # i.print_info()
    print(i.name, i.age)



#%% 定义函数，查找年龄>=30的学生数量
def search_age():
    lie = []
    for item in list_stu:
        if item.age >= 30:
            lie.append(item)
    return len(lie)

print(f"大于等于30学生有：{search_age()}个")


#%% 定义函数，将list_stu所有学生成绩归零
def empty():
    for i in list_stu:
        i.score = 0

empty()
for i in list_stu:
    i.print_info()


#%% 定义函数，获取list_stu列表中所有名字
def get_name():
    lie = []
    for i in list_stu:
        lie.append(i.name)
    return lie

li = get_name()
for i in li:
    print(i)

#%% 定义函数，在list_stu中查找年龄最大的函数
def get_age_max():
    """最简单方法：
    :    lie = []
    :    for i in list_stu:
    :       lie.append(i.age)
    :    p = max(lie)
    :    return p
    利用排序算法找最大
    lie = []
    for i in list_stu:
        lie.append(i.age)
    print(lie)
    # 利用升序算法，找最大
    for j in range(len(lie)):
        for k in range(j + 1, len(lie)):
            if lie[j] < lie[k]:
                # zuida = lie[j]
                lie[j], lie[k] = lie[k], lie[j]
    print(lie) 
    return lie[0]
    
    """
    
    # 利用排序算法思想实现找最大
    for i in list_stu:
        sc = i.age
        for c in range(1, len(list_stu)): # 往后移一位
            if sc < list_stu[c].age: # 进行比对
                # 重复赋值，大的覆盖小的
                sc = list_stu[c]
        return sc

print(f"年龄最大的是{get_age_max()}")




